﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
using System.Drawing.Imaging;                                                                               //包含图像处理功能；
using System.IO;                                                                                            //包含访问SQL Server所需的各类对象；

namespace 课程设计.PresentationLayer
{
    public partial class DrugInformation : Form
    {
        private string PhotoFileName;

        public DrugInformation()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
            this.cmb_ProducingArea.DropDownStyle = ComboBoxStyle.DropDownList;  
        }

        private void btn_Search_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串，并将之赋予SQL连接的连接字符串属性；
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令；
            SqlCommand sqlCommand2 = new SqlCommand();                                                      //声明并实例化SQL命令；
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接；
            sqlCommand2.Connection = sqlConnection;                                                         //将SQL命令的连接属性指向SQL连接；
            sqlCommand.CommandText = "SELECT * FROM tb_Province;";                                             //指定SQL命令的命令文本；该命令查询所有班级，以用作下拉框数据源；
            sqlCommand2.CommandText = "SELECT * FROM tb_Drug WHERE DrugNo=@DrugNo;";                             //指定SQL命令的命令文本；该命令查询指定学生；
            sqlCommand2.Parameters.AddWithValue("@DrugNo", this.txb_DrugNo.Text.Trim());                                       //向SQL命令的参数集合添加参数的名称、值；
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器，同时借助构造函数，将其SelectCommand属性设为先前创建的SQL命令；
            sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令；
            DataTable provinceTable = new DataTable();                                                         //声明并实例化数据表，用于保存所有班级，以用作下拉框数据源；
            sqlConnection.Open();                                                                           //打开SQL连接；
            sqlDataAdapter.Fill(provinceTable);                                                                //SQL数据适配器读取数据，并填充班级数据表；
            this.cmb_ProducingArea.DataSource = provinceTable;                                                         //将班级下拉框的数据源设为班级数据表；
            this.cmb_ProducingArea.DisplayMember = "Name";                                                          //将班级下拉框的显示成员设为班级数据表的名称列；
            this.cmb_ProducingArea.ValueMember = "No";                                                              //将班级下拉框的值成员设为班级数据表的编号列；
            SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();                                      //调用SQL命令的方法ExecuteReader来执行命令，并获取数据阅读器；
            if (sqlDataReader.Read())                                                                       //若数据阅读器成功读取到下一条记录（首次查询则表示第一条记录）；
            {
                this.txb_DrugNo.Text = sqlDataReader["DrugNo"].ToString();                                          //在数据阅读器的索引器中指定列名，从而访问当前记录的指定列的值，并赋予相应控件；
                this.txb_DrugName.Text = sqlDataReader["DrugName"].ToString();
                this.rdb_ChineseMedicine.Checked = (bool)sqlDataReader["Type"];
                this.rdb_WesternMedicine.Checked = !(bool)sqlDataReader["Type"];
                this.txb_Bid.Text = sqlDataReader["Bid"].ToString();
                this.txb_Price.Text = sqlDataReader["Price"].ToString();
                this.dtp_DateOfManufacture.Value = (DateTime)sqlDataReader["DateOfManufacture"];
                this.cmb_ProducingArea.SelectedValue = (int)sqlDataReader["ProducingAreaNo"];
                this.txb_TermOfValidity.Text = sqlDataReader["TermOfValidity"].ToString();
            }
            sqlDataReader.Close();                                               
        }

        private void rdb_WesternMedicine_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void btn_Update_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串，并将之赋予SQL连接的连接字符串属性；
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令；
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接；
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本；
                "UPDATE tb_Drug"
                + " SET DrugName=@DrugName,Type=@Type,Bid=@Bid,Price=@Price,DateOfManufacture=@DateOfManufacture,ProducingAreaNo=@ProducingAreaNo,TermOfValidity=@TermOfValidity"
                + " WHERE DrugNo=@DrugNo;";
            sqlCommand.Parameters.AddWithValue("@DrugName", this.txb_DrugName.Text.Trim());                         //向SQL命令的参数集合添加参数的名称、值；
            sqlCommand.Parameters.AddWithValue("@Type", this.rdb_ChineseMedicine.Checked);
            sqlCommand.Parameters.AddWithValue("@Bid", this.txb_Bid.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@Price", this.txb_Price.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@DateOfManufacture", this.dtp_DateOfManufacture.Value);
            sqlCommand.Parameters.AddWithValue("@ProducingAreaNo", (int)this.cmb_ProducingArea.SelectedValue);
            sqlCommand.Parameters.AddWithValue("@TermOfValidity", this.txb_TermOfValidity.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@DrugNo", this.txb_DrugNo.Text.Trim());
            sqlConnection.Open();                                                                           //打开SQL连接；
            int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令，向数据库写入数据，并返回受影响行数；
            sqlConnection.Close();                                                                          //关闭SQL连接；
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");         
        }

        private void btn_OpenPhoto_Click(object sender, EventArgs e)
        {
            OpenFileDialog openPhotoDialog = new OpenFileDialog()                                           //声明并实例化打开文件对话框；
            {                                                                                           //在初始化器中，设置打开文件对话框的各属性；
                Title = "打开照片文件"                                                      //对话框标题；
                ,
                Filter = "BMP Files (*.jpg)|*.jpg"                                                    //文件格式过滤器；
                ,
                InitialDirectory = @"C:\"                                                             //初始目录；
            };
            if (openPhotoDialog.ShowDialog() == DialogResult.OK)                                            //显示打开文件对话框，若打开文件对话框的对话结果为点击OK键；
            {
                this.PhotoFileName = openPhotoDialog.FileName;                                              //将对话框获得的文件名，存入本窗体的私有字段中；
                this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName);                                  //调用图像的静态方法FromFile从指定文件中读取图像，并赋予图像框；
            }
        }
    }
}
